/*
尽可能还原 Promise 中的每一个 API, 并通过注释的方式描述思路和原理.
*/
//

const { reject } = require('lodash');

// 1.使用new关键字创建一个Promise对象 ----> promise就是一个类
// 2.Promise对象中需传入回调函数。回调函数就是一个执行器，在每次使用new关键字创建Promise这个类是执行器会立即执行
// 3.回调函数中需加入2个参数resolve、reject，这2个参数都是函数，调用这个两个函数更改Promise的状态。
/**
 Promise有3种状态：pending待定、fulfilled成功、rejected失败
 promise中的状态只能从pending->fulfilled，pending->rejected
 一旦状态更改后不可在更改
4.resolve将promise状态更改为fulfilled
  reject将promise状态更改为rejected

  在更改状态时需传递对应状态的数据
 */

/**
 1.使用class关键字创建promise类
 2.使用constructor接收执行器executor，且执行器需要立即执行
 */
class MyPromise {
    // 3.executor此处执行器相当于promise对象中的回调函数
    constructor(executor) {
        // 4.执行器中需传入promise对象2种更改状态的参数。调用的是MyPromise类内部的方法，此处需加this.
        executor(this.reslove, this.reject);
    }
    // 7.
    // 5.添加resolve属性(直接调用，使用箭头函数使后期调用时this指向内部promise对象)
    resolve = () => {};
    // 6.添加reject属性
    reject = () => {};
}
